package api

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

func init() {
	fmt.Println("api模块初始化成功……")
}

func Welcome() {
	fmt.Println("陈文小超欢迎来到今日golang语言的学习……")
}

// String 字符串练习
func String() {
	// 字符串长度
	str := "venki.chen"
	fmt.Printf("str的长度是：%v\n", len(str))

	// 包含汉字字符串
	str2 := "venki.chen陈文小超"
	str3 := []rune(str2)
	for i := 0; i < len(str3); i++ {
		fmt.Printf("字符=%c\n", str3[i])
	}
	fmt.Println("-----------------")

	// 字符串转整形
	n, err := strconv.Atoi("123")
	if err != nil {
		fmt.Printf("转换错误：%v\n", err)
	} else {
		fmt.Printf("转换成功：%v\n", n)
	}
	fmt.Println("-----------------")

	// 查找指定字符串是否存在另一个字符串中
	bool1 := strings.Contains("venki.chen", "chen")
	if bool1 {
		fmt.Println("包含")
	} else {
		fmt.Println("不包含")
	}
	fmt.Println("-----------------")

	// 统计字符串中有几个指定的字符串
	num := strings.Count("venki.chen", "e")
	fmt.Println(num)
}

// TimeTest 时间日期相关练习
func TimeTest() {
	// 获取当前时间
	now := time.Now()
	fmt.Printf("时间是：%v,类型是：%T\n", now, now)

	// 获取年
	year := now.Year()
	fmt.Println(year)
	// 获取月（注意格式，返回来可能是因为的，需要强转下）
	month := int(now.Month())
	fmt.Println(month)
	// 获取日
	day := now.Day()
	fmt.Println(day)
	// 获取时
	hour := now.Hour()
	fmt.Println(hour)
	// 获取分
	minute := now.Minute()
	fmt.Println(minute)
	// 获取秒
	second := now.Second()
	fmt.Println(second)

	fmt.Printf("当前的时间是：%d/%d/%d %d:%d:%d\n", now.Year(), now.Month(),
		now.Day(), now.Hour(), now.Minute(), now.Second())

	// 利用格式化时间
	fmt.Printf("当前时间是：%v\n", now.Format("2006/01/02 15:04:05"))
	fmt.Printf("当前时间是：%v\n", now.Format("2006-01-02 15:04:05"))
	fmt.Printf("当前时间是：%v\n", now.Format("15:04:05"))
	fmt.Printf("当前时间是：%v\n", now.Format("15-04-05"))

	fmt.Println("-----")
	startTime := time.Now().Unix()
	fmt.Printf("程序开始时间：%v\n", startTime)
	// test01()
	endTime := time.Now().Unix()
	fmt.Printf("程序结束时间：%v\n", endTime)
	fmt.Printf("调用test01函数花费了%v秒\n", endTime-startTime)
	fmt.Println("---------------------")
	// errorTest()

	// 数组
	arrayTest()
}

// 数组
func arrayTest() {
	// fmt.Printf("%c\n", byte(67))
	/*var byteArr [26]byte
	for i := 0; i < len(byteArr); i++ {
		byteArr[i] = 'A' + byte(i)
	}
	for i := 0; i < len(byteArr); i++ {
		byteArr[i] = 'A' + byte(i)
		fmt.Printf("第%d个元素是：%c\n", i+1, byteArr[i])
	}*/
	/*var heroes [3]string = [3]string{"宋江", "诸葛亮", "陈文小超"}
	for index, value := range heroes {
		fmt.Printf("第%d英雄是：%v\n", index+1, value)
	}*/
	// 数组使用
	/*fmt.Println("请输入5个成绩：")
	var score [5]float64
	for i := 0; i < len(score); i++ {
		fmt.Printf("请输入第%d个学生成绩：\n", i+1)
		_, err := fmt.Scanln(&score[i])
		if err != nil {
			fmt.Println(err)
		} else {
			fmt.Printf("第%d个学生的成绩是：%v\n", i+1, score[i])
		}
	}
	fmt.Println(score)*/

	// 数组定义和内存分布
	/*var intArr [3]int
	fmt.Println(intArr)
	fmt.Printf("intArr的地址是：%p,intArr[0]的地址是：%p,intArr[1]的地址是：%p", &intArr, &intArr[0], &intArr[1])*/

	/*var hens [6]float64
	hens[0] = 3.0
	hens[1] = 3.0
	hens[2] = 3.0
	hens[3] = 3.0
	hens[4] = 3.0
	hens[5] = 3.0
	total := 0.0
	for i := 0; i < len(hens); i++ {
		total += hens[i]
	}

	avg := fmt.Sprintf("%.2f", total/float64(len(hens)))

	fmt.Println(avg)*/
}

// 错误异常处理
func errorTest() {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Printf("err=%v\n", err)
		}
	}()
	num1 := 100
	num2 := 1
	str := num1 / num2
	fmt.Println(str)
}

func test01() {
	str := " "
	for i := 0; i < 10000; i++ {
		str += "venki.chen" + strconv.Itoa(i)
	}
}
